A data storage system environment typically includes one or more host computing devices (hosts) in communication with one or more storage arrays. A host typically executes an application program (e.g., a database application) which requires data associated with the application to be stored locally (i.e., on the host), remotely (i.e., on one of the storage arrays), or stored both locally and remotely. The host typically includes memory devices that provide both volatile random access memory capacity (e.g., Dynamic RAM or DRAM devices) and non-volatile random access memory capacity (e.g., flash memory devices). The storage array typically includes storage devices that provide non-volatile random access storage capacity (e.g., flash memory devices) and non-volatile large storage capacity (e.g., hard disk drives (HDDs) and tape drives). In general, random access memory is used to satisfy high throughput and/or bandwidth requirements of a given application program while the hard disk and tape drives are used to satisfy capacity requirements.
One major consideration for an application program developer is to determine on which type of memory or storage device to store data associated with the application program. Data storage systems typically use “tiering” techniques that attempt to control on what storage level, or tier, data associated with an application program is stored. However, since each application program being developed has its own throughput, bandwidth and capacity requirements, no one memory and storage tiering solution will accommodate every application program.
A need therefore exists for techniques for providing flexibility in determining how and where to store data in a data memory and storage system environment.